<?php

class AvisoController extends Controller {

    /**
     * @final   pacote das views deste controller
     */
    const PACKAGE_VIEW = 'aviso';
    /**
     * @var AvisoService
     */
    private $avisoService;
    /**
     * @var SetorService
     */
    private $setorService;
    /**
     * @var CategoriaService
     */
    private $categoriaService;

    public function __construct() {
        $this->avisoService = AvisoService::getInstance();
        $this->setorService = SetorService::getInstance();
        $this->categoriaService = CategoriaService::getInstance();
    }

    public function visualizar() {
        $IDAviso = treatUrl('id');
        multipleEntities($IDAviso);

        $Aviso = $this->avisoService->findById($IDAviso);

        if( empty($Aviso) ) {
            redirect('ferramenta', 'listar-avisos');
        }

        $this->save(SESSION_INTERFACE, 'Notice', $Aviso);
        $this->view('visualizar', self::PACKAGE_VIEW);
    }

    public function listar() {
        $this->save(SESSION_INTERFACE, 'NoticesList', $this->avisoService->findActiveNotices());
        $this->view('listar', self::PACKAGE_VIEW);
    }

    public function cadastrar() {
        $this->save(SESSION_INTERFACE, 'SectorsList', $this->setorService->findAll());
        $this->save(SESSION_INTERFACE, 'CategoriesList', $this->categoriaService->findAll());
        $this->view('cadastrar', self::PACKAGE_VIEW);
    }

    public function inserir() {
        $ArDados = $_POST;

        if( empty($ArDados['StTitulo']) ) {
            $this->saveReturn('O Campo "Título" não foi recebido!');
        } else if( empty($ArDados['IDCategoria']) ) {
            $this->saveReturn('O Campo "Categoria" não foi recebido!');
        } else if( empty($ArDados['IDSetor']) ) {
            $this->saveReturn('O Campo "Setor" não foi recebido!');
        } else if( empty($ArDados['TxAviso']) ) {
            $this->saveReturn('O Campo "Aviso" não foi recebido!');
        } else if( empty($ArDados['DtInicio']) ) {
            $this->saveReturn('O Campo "Início" não foi recebido!');
        } else if( empty($ArDados['DtDesativar']) ) {
            $this->saveReturn('O Campo "Desativar" não foi recebido!');
        }

        if( !$this->hasReturn() ) {
            $ArDados['DtInicio'] = dateBRtoBD($ArDados['DtInicio']);
            $ArDados['DtDesativar'] = dateBRtoBD($ArDados['DtDesativar']);
            if( $this->avisoService->save($ArDados) ) {
                $this->saveReturn('Aviso criado com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao criar o aviso!');
            }
        }

        $this->showJsonResponse();
    }

    public function editar() {
        $IDAviso = treatUrl('id');
        multipleEntities($IDAviso);

        $Notice = $this->avisoService->findById($IDAviso);

        if( empty($Notice) ) {
            redirect('aviso', 'listar');
        }

        $this->save(SESSION_INTERFACE, 'SectorsList', $this->setorService->findAll());
        $this->save(SESSION_INTERFACE, 'CategoriesList', $this->categoriaService->findAll());
        $this->save(SESSION_INTERFACE, 'NoticeEdit', $Notice);

        $this->view('editar', self::PACKAGE_VIEW);
    }

    public function atualizar() {
        $ArDados = $_POST;

        if( empty($ArDados['StTitulo']) ) {
            $this->saveReturn('O Campo "Título" não foi recebido!');
        } else if( empty($ArDados['IDCategoria']) ) {
            $this->saveReturn('O Campo "Categoria" não foi recebido!');
        } else if( empty($ArDados['IDSetor']) ) {
            $this->saveReturn('O Campo "Setor" não foi recebido!');
        } else if( empty($ArDados['TxAviso']) ) {
            $this->saveReturn('O Campo "Aviso" não foi recebido!');
        } else if( empty($ArDados['DtInicio']) ) {
            $this->saveReturn('O Campo "Início" não foi recebido!');
        } else if( empty($ArDados['DtDesativar']) ) {
            $this->saveReturn('O Campo "Desativar" não foi recebido!');
        }

        if( !$this->hasReturn() ) {
            $ArDados['DtInicio'] = dateBRtoBD($ArDados['DtInicio']);
            $ArDados['DtDesativar'] = dateBRtoBD($ArDados['DtDesativar']);
            if( $this->avisoService->update($ArDados) ) {
                $this->saveReturn('Aviso criado com sucesso!', 1);
            } else {
                $this->saveReturn('Ocorreu um erro ao criar o aviso!');
            }
        }

        $this->showJsonResponse();
    }

    public function filter() {
        $filterType = treatUrl('type');
        $IDFilter = $_POST['filterkey'];
        multipleEntities($IDFilter);

        $ArNoticeList = $this->avisoService->findNoticeByFilter($IDFilter, $filterType);

        $this->save(SESSION_INTERFACE, 'NoticesList', $ArNoticeList);

        $this->view('noticetablelist', self::PACKAGE_VIEW, true);
    }

}

?>
